<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- [CHD:20.06.18] correction de la declaration Between (voir Range), qui etait fausse depuis toujours, et qui reste a parfaire -->
<!-- [CHD:20.06.08] ajout du tag KeepFormat pour Simple  -->
<!-- [CHD:19.05.06] je vire aussi Pointer et Occurence qui sont toujours inutilises (pas sur qu'ils existent un jour, ceux-la!)  -->
<!-- [CHD:19.05.06] suppression definitive de Enum / Enumerator -->
<!-- [CHD:19.05.06] suppression definitive de Relationship et SubRelationship (ce dernier remplace par Path) -->
<!-- [CHD:19.05.06] pour se conformer a la doc, et par homogeneite entre Path et PathType, les tags AdaptativeToMinor, RerouteOnEffectivityChange et SynchroSensitivity deviennent optionnels  -->
<!-- [CHD:19.02.08] ajout de "lowobjectcount" sur Class et Extension -->
<!-- [CHD:18.06.22] on remet du use="required" pour la majorite des Uuid -->
<!-- [FRM:17.10.11] support des flattables (evolutions 18x) -->
<!-- [FRM:16.02.02] support des flattables-->
<!-- [FRH:14.11.28] ajout des aspects comportemental des subclauses-->
<!-- [FRH:14.06.03] support du mot clef Path comme alternative de SubRelationship-->
<!-- [FRH:14.06.03] ajout de la capacite d'avoir des attributs pour les PathTypes et les SubRelationship, et d'avoir un super type -->
<!-- [FRH:14.05.16] ajout du tag SIXW sur les RelationClass / SubClause / SubRelationship to establish the relationship with RDF navigation and index model -->
<!-- [FRH:14.05.16] ajout du tag RDFClass sur les Class / RelationClass / Extension to establish the relationship with RDF navigation and index model -->
<!-- [FRH:14.04.09] ajout du tag Discipline pour l'element RelationClass (en vue du projet de suppression du mapping de type d'instance) -->
<!-- [FRH:14.04.09] ajout du tag InterchangeableMinors pour l'element Class (pas besoin sur RelationClass) -->
<!-- [CHD:14.04.04] ajout du tag SupportedByProviders pour l'element Package -->
<!-- [FRH:14.01.20] ajout de ProgrammerOnly comme une des options de CustomerExposition pour les Class, RelationClass et Extension -->
<!-- [CHD:13.09.12] suppression de la valeur par defaut du tag Specializable des elements Class et Extension -->
<!-- [CHD:13.09.12] suppression du tag Usage de l'element Extension -->
<!-- [CHD:13.04.22] le tag CustomerExposition de l'element Simple disparait -->
<!-- [CHD:12.06.07] ajout de l'element Method pour l'element Extension -->
<!-- [CHD:12.04.27] le tag CustomerExposition de l'element CustomerExtension disparait -->
<!-- [FRH:12.04.12] ajout du type Binary pour le Simple -->
<!-- [CHD:12.04.12] le tag CustomerExposition sur Package|Class|Extension|Simple perd son default (mais ne peut pas devenir required a cause des Package tels que ModelerType = Specialization ou Deployment)   -->
<!-- [CHD:12.03.21] ajout du tag UseProcedures pour l'element Package -->
<!-- [CHD:12.03.12] suppression du tag obsolete Extensible sur Class et Extension -->
<!-- [CHD:12.03.05] ajout element InterfaceImplementation pour element Class (pas besoin pour Extension) -->
<!-- [CHD:11.10.18] ajout element Volatile pour elements Class et Extension -->
<!-- [CHD:11.10.18] ajout tag Magnitude pour element Simple -->
<!-- [CHD:11.10.18] ajout Default du tag CustomerExposition pour element Enum  -->

<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="PLMDictionaryUnified"
targetNamespace="PLMDictionaryUnified"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
  <!-- Description package: a package is a set of logically connected concepts (Class, RelationClass, Simple, ...) belonging to a modeler -->
  <xs:complexType name="Package">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Class" />
      <xs:element ref="tns:RelationClass" />
      <xs:element ref="tns:Extension" />
      <xs:element ref="tns:PathType" />
      <xs:element ref="tns:GlobalSimple"/>
      <xs:element ref="tns:Property" />
      <xs:element ref="tns:Function"/>
      <xs:element ref="tns:Signature" />
      <xs:element ref="tns:UniqueKey" />
      <xs:element ref="tns:FlatTable" />
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <!-- Name of the package: must be unique -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!--Indicates if this packages contains elements that are public (known by customer through UI or customization tools) or pure private modeling elements -->
    <!--None means private -->
    <!--Programmer means public -->
    <!--nb: devrait etre use="required", mais on ne peut pas a cause de Package declares ModelerType Specialization ou Deployment qui utilisent cette meme xsd (damned!)   -->
    <xs:attribute name="CustomerExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates the kind of package: customer (Specialization or Deployment) or DS (Top or Core) -->
    <xs:attribute name="ModelerType" default="Top">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Top"/>
          <xs:enumeration value="Specialization"/>
          <xs:enumeration value="Deployment"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this package is a sub package of another one (in the UI, we will present only the super one) -->
    <xs:attribute name="BelongsToModeler" type="xs:string" />
    <!--Contains the list of packages where we will find necessary definitions used in this package -->
    <xs:attribute name="UseNames" type="xs:string" />
    <!-- Indicates the name of the icon associated to the package-->
    <xs:attribute name="IconName" type="xs:string"/>
    <!-- Indicates the list of Providers which are supposed to support the Package definitions -->
    <xs:attribute name="SupportedByProviders" type="xs:string"/>
    <!--For a package defining procedures, defines the list of packages where we will find necessary procedures used in this package -->
    <xs:attribute name="UseProcedures" type="xs:string" />
    <!-- Indicates if a package is deprecated (should not be seen anymore): in this case, all content of the package is deprecated-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates in which architecture the schema will be used: by default, it will be web if not defined-->
    <xs:attribute name="Architecture">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Web"/>
          <xs:enumeration value="Native"/>
          <xs:enumeration value="All"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Package" type="tns:Package" />

  <!-- Description Class: defines a type of object in the database -->
  <xs:complexType name="Class">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment"/>
      <xs:element ref="tns:CAAComment"/>
      <xs:element ref="tns:Property"/>
      <xs:element ref="tns:Simple"/>
      <xs:element ref="tns:ReuseGlobalSimple"/>
      <xs:element ref="tns:Volatile"/>
      <xs:element ref="tns:Path" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tns:Method" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tns:InterfaceImplementation" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tns:ContextKey"/>
    </xs:choice>
    <!--Name of the class: must be unique-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Indicates if the class can be used to create objects: abstract=No-->
    <xs:attribute name="Abstract" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this class is public (known by customer through UI or customization tools) or is a pure private one-->
    <!--Modification 2015x: adding ProgrammerOnly to indicate a public type but not shown in UI-->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
          <xs:enumeration value="ProgrammerOnly" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Defines the class, this class inherits from-->
    <xs:attribute name="SuperName" type="xs:string" use="required"/>

    <!-- Defines the public Unified Resource Identifier --> 
	<!-- NB: as of April 2019, it is only valid for VPMReference, but it may be useful later on other Class -->
	<!-- the metadata checker will take care of additional checks on delivery time -->
    <xs:attribute name="PublicResourceURI" type="xs:string"/>

    <!-- Still used but not strategic: defines the exposition of the class to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports Major revisionning: used by wintop life cycle commands UI -->
    <xs:attribute name="NewMajorRevisionAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports Minor revisionning: used by wintop life cycle commands UI -->
    <xs:attribute name="NewMinorRevisionAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports mechanism of evolutions: used by wintop life cycle commands UI -->
    <xs:attribute name="EvolutionAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports mechanism of iterations: used by server side iteration mechanism -->
    <xs:attribute name="IterationAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports change maturity:used by wintop life cycle commands UI -->
    <xs:attribute name="ChangeMaturityAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports duplication: used by wintop life cycle commands UI-->
    <xs:attribute name="DuplicateAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports delete: used by wintop life cycle commands UI-->
    <xs:attribute name="DeleteAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports lock/unlock: used by wintop life cycle commands UI-->
    <xs:attribute name="LockUnlockAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports transfer of ownership: used by wintop life cycle commands UI-->
    <xs:attribute name="TransferOwnershipAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports edit properties: used by wintop UI-->
    <xs:attribute name="EditPropertiesAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports save as new: used by Wintop propagate UI-->
    <xs:attribute name="SaveAsNewAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports manage access (can drive the access rights of objects aggregated under it like design workspace)-->
    <xs:attribute name="ManageAccessAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports manage to be shared between projects: used by Wintop life cycle operations toolbox-->
    <xs:attribute name="ShareBetweenProjectsAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports to be changed of project (aka collaborative space)-->
    <xs:attribute name="ChangeCollaborativeSpaceAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if the minor versions of an object of this type can be replaced by one another: ce mot clef s'herite-->
    <xs:attribute name="InterchangeableMinors">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class carries pointers: not used yet-->
    <xs:attribute name="CarryPointers">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class carries streams: used when importing data (for instance from XPDM) to decide what to do with streams-->
    <xs:attribute name="CarryStreams">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <!-- Supports streams but there is no precision on the number of streams. Corresponds to 0 to many streams -->
          <xs:enumeration value="Yes"  />
          <!-- Does not support streams -->
          <xs:enumeration value="No" />
          <!-- Requires one stream and only one -->
          <xs:enumeration value="One" />
          <!-- Requires one stream at least -->
          <xs:enumeration value="One_At_Least" />
          <!-- Maximum is one -->
          <xs:enumeration value="One_Or_Zero" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class aggregates components: not used yet-->
    <xs:attribute name="AggregatesComponents">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports update stamp: not used yet-->
    <xs:attribute name="IsSynchronizable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports to have a unique key: used by DMA (Data model administration tool)-->
    <xs:attribute name="UniqueNamingRule">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class is indexable/searchable: used by the crawler and by win advanced search-->
    <xs:attribute name="Searchable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class has a nature of Independent, Aggregated or SubComponent: see dedicated documentation -->
    <xs:attribute name="ObjectNature">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Independent" />
          <xs:enumeration value="Aggregated" />
          <xs:enumeration value="SubComponent" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class is configurable: can own a variability space with configuration options -->
    <xs:attribute name="Configurable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class can be controlled by eengineering change actions-->
    <xs:attribute name="ChangeManagementSupport">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- RDFClass: how the class will be mapped to a RDF Class in the navigation model / Indexer  -->
    <xs:attribute name="RDFClass" type="xs:string"/>
    <!-- Indicates if a class appears in PLM New or Insert New: possible values New, Insert, All (New+Insert) with _CAA suffix and _Offline suffix-->
    <xs:attribute name="Newable" type="xs:string"/>
    <!-- Redirect a class to another one upper in the hierarchy to indicate that the creation of this class will be conditioned to the same packaging option as the upper class-->
    <xs:attribute name="GroupingType" type="xs:string"/>
    <!-- Indicates what is the method to instanciate this class (C++ one)-->
    <xs:attribute name="KweNew_InstanciationMethod" type="xs:string"/>
    <!--Indicates if the class can be specialized by customer: used by KWD (data model specialization tool)-->
    <xs:attribute name="Specializable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if the class can be extended by customer extensions: used by KWD (data model specialization tool)-->
    <xs:attribute name="CustomerExtensible">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates the corresponding types of instances that are valid for a class. Determines also the fact that it can be instantiated -->
    <!--Contains different instance types, separated by ";". The first one is the instance type chosen by default -->
    <xs:attribute name="CreateInstName" type="xs:string"/>
    <!--Defines the level of class (modeler versus application (Discipline=Yes)): application cannot override life cycle operations behavioral patterns -->
    <xs:attribute name="Discipline" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates what are the aggregatable classes for a given type - used by UI Insert New generic dialog box-->
    <xs:attribute name="AggregatableTypes" type="xs:string"/>
    <!-- Indicates what are the possible owner types for a given type: verified at PLM Core level-->
    <xs:attribute name="OwnerTypes" type="xs:string"/>
    <!-- Indicates what are the possible owner classes of instances of a given type: verified at PLM Core level-->
    <xs:attribute name="InstantiationOwnerTypes" type="xs:string"/>
    <!-- Indicates the name of the icon associated to the class: used by the wintop UI-->
    <xs:attribute name="IconName" type="xs:string"/>
    <!-- Indicates the name of the occurence type corresponding to this class: used by Knowledgeware. If a class has no occurrence type, it won't generate virtual occurrence in the tree-->
    <xs:attribute name="OccurrenceType" type="xs:string"/>
    <!-- Abbreviation of a class used in OOTB naming computation -->
    <xs:attribute name="Abbreviation" type="xs:string"/>
    <!-- Indicates if objects of this class are considered as standard objects (that is not imported as new in briefcase exchanges)-->
    <xs:attribute name="Standard" type="xs:string"/>
    <!-- Indicates if a class is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if the choice of policy for a Class is based on an attribute value-->
    <xs:attribute name="PolicyChoiceDependsOnAttributeValue">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Valid only for Connection (structured/not_structured) -->
    <xs:attribute name="Structured">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates that there will not be a large number of objects of this kind, in order to allow database query without search criteria -->
	<xs:attribute name="lowobjectcount">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Class" type="tns:Class" />

  <!-- Description of an extension type: is a set of attributes (and a types) that can be added on the fly on an object of a given type -->
  <xs:complexType name="Extension">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Property"/>
      <xs:element ref="tns:Comment"/>
      <xs:element ref="tns:CAAComment"/>
      <xs:element ref="tns:Simple"/>
      <xs:element ref="tns:ReuseGlobalSimple"/>
      <xs:element ref="tns:Method"/>
      <xs:element ref="tns:Volatile"/>
    </xs:choice>
    <!--Name of the extension: must be unique-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Indicates if the extension can be used to really extend objects: Abstract=No-->
    <xs:attribute name="Abstract" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Still used but not strategic: defines the exposition of the extension to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this extension is public (known by customer through UI or customization tools) or is a pure private one-->
    <!--Modification 2015x: adding ProgrammerOnly to indicate a public type but not shown in UI-->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
          <xs:enumeration value="ProgrammerOnly" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if the extension can be specialized by customer: used by KWD (data model specialization tool)-->
    <xs:attribute name="Specializable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- list of classes (or relation classes) that can be extended by this extension -->
    <xs:attribute name="ScopeNames" type="xs:string"/>
    <!-- extension from which the current extension inherit -->
    <xs:attribute name="SuperName" type="xs:string" />
    <!--Defines the level of extension (modeler versus application (Discipline=Yes): not very used except for transition from old to new typing -->
    <xs:attribute name="Discipline" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an extension is indexable/searchable-->
    <xs:attribute name="Searchable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- RDFClass: how the class will be mapped to a RDF Class in the navigation model / Indexer  -->
    <xs:attribute name="RDFClass" type="xs:string"/>
    <!-- Indicates if an extension appears in PLM New or Insert New: possible values New, Insert, All (New+Insert) with _CAA suffix and _Offline suffix-->
    <xs:attribute name="Newable" type="xs:string"/>
    <!-- Redirect an extension to another one upper in the hierarchy to indicate that the creation of this extension will be conditioned to the same packaging option as the upper extension-->
    <xs:attribute name="GroupingType" type="xs:string"/>
    <!-- Indicates what is the method to instanciate this extension in C++-->
    <xs:attribute name="KweNew_InstanciationMethod" type="xs:string"/>
    <!-- Indicates the name of the icon associated to the extension-->
    <xs:attribute name="IconName" type="xs:string"/>
    <!-- Indicates the name of the occurence type corresponding to this extension-->
    <xs:attribute name="OccurrenceType" type="xs:string"/>
    <!-- Indicates if the extension on an object will transform it in a standard objects (that is not imported as new in briefcase exchanges)-->
    <xs:attribute name="Standard" type="xs:string"/>
    <!-- Indicates if an extension is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates that an extension is exportable in briefcase or not. Default is Yes -->
    <xs:attribute name="V6Exportable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- obsolete: to support history -->
    <xs:attribute name="ScopeRefs" type="xs:string" />
    <!-- obsolete: to support history -->
    <xs:attribute name="SuperRef" type="xs:string" />
    <!-- Indicates that there will not be a large number of objects of this kind, in order to allow database query without search criteria -->
	<xs:attribute name="lowobjectcount">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Extension" type="tns:Extension" />

  <!-- Description of standard persistent attributes -->
  <xs:complexType name="GlobalSimple">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Property"/>
      <xs:element ref="tns:Range" />
    </xs:choice>
    <!-- Name of the attribute: must be unique inside the scope of the class/relation class/extension where it is defined -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!--Type of value -->
    <xs:attribute name="Type" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Date" />
          <xs:enumeration value="timestamp" />
          <xs:enumeration value="Real" />
          <xs:enumeration value="Binary" />
          <xs:enumeration value="Clob" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--is attribute multi valuated?: correspond to a list of values -->
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates if this attribute will be considered as Faceted in search (seen as a discrete list of values) -->
    <xs:attribute name="Faceted">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates if this attribute is PLM impacting: means that if it is modified, the update stamp of the owner of the attribute is modified -->
    <xs:attribute name="PLMImpacting">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--default value of the attribute -->
    <xs:attribute name="DefaultValue" type="xs:string" />
    <!--max length for a string attribute -->
    <xs:attribute name="MaxLength" type="xs:string" />
    <!--magnitude of a real attribute: list of possible values is defined in CATCkeMagnitudes file  -->
    <xs:attribute name="Magnitude" type="xs:string" />
    <!--defines both the visibility of the attribute (public/private) and who controls it  -->
    <!--Private means private: not seen from user and controlled by the modeler only. Can not be get or set by anybody else-->
    <!--Internal means private: not seen from user and controlled by the modeler. It cannot be read or set by anybody except the modeler. The modeler may provide some access -->
    <!--InternalRO means private to the server -->
    <!--External means public but under the control of the modeler and computed by the modeler. It is read only from a user perspective -->
    <!--ExternalRO means public but under the control of the server. It is read only from a user perspective -->
    <!--ExternalIN means public but under the control of the modeler. It is read write from a user perspective -->
    <!--Free means public and without any control from the modeler. It is read write from a user perspective -->
    <xs:attribute name="Protection" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Private"/>
          <xs:enumeration value="Internal"/>
          <xs:enumeration value="Free"/>
          <xs:enumeration value="ExternalRO" />
          <xs:enumeration value="ExternalIN" />
          <xs:enumeration value="External"/>
          <xs:enumeration value="InternalRO"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates that the attribute will be reset during cloning operation  -->
    <xs:attribute name="ResetOnCloning">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates that the attribute will be reset during revision operation  -->
    <xs:attribute name="ResetOnNewVersion">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Is the attribute defined once and cannot be modified afterwards?: for date and string attributes. Default is No -->
    <xs:attribute name="SetOnlyOnce">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="AtCreation"/>
          <xs:enumeration value="Later"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- For External/ExternalRO/ExternalIN/Free attributes, we can restrict the access in the UI. By defaut, it is deduced from protection -->
    <xs:attribute name="UIAccess">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None"/>
          <xs:enumeration value="ReadOnly"/>
          <xs:enumeration value="ReadWrite"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an attribute is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an attribute is multi line (must be presented as a multiple line editor). Default is no. Makes sense for strings-->
    <xs:attribute name="multiline">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="GlobalSimple" type="tns:GlobalSimple" />

  <!-- Reuse of a global attribute within a Class, RelationClass, Extension, Path, PathType -->
  <xs:complexType name="ReuseGlobalSimple">
    <!-- Name of the attribute: must be unique inside the scope of the class/relation class/extension where it is defined -->
    <xs:attribute name="Name" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="ReuseGlobalSimple" type="tns:ReuseGlobalSimple" />

  <!-- Description of standard persistent attributes -->
  <xs:complexType name="Simple">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Property"/>
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:Range" />
    </xs:choice>
    <!-- Name of the attribute: must be unique inside the scope of the class/relation class/extension where it is defined -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!-- Still used but not strategic: defines the exposition of the class to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Type of value -->
    <xs:attribute name="Type" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Date" />
          <xs:enumeration value="timestamp" />
          <xs:enumeration value="Real" />
          <xs:enumeration value="Binary" />
          <xs:enumeration value="Clob" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--is attribute multi valuated?: correspond to a list of values -->
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates if this attribute will be considered as Faceted in search (seen as a discrete list of values) -->
    <xs:attribute name="Faceted">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates if this attribute is PLM impacting: means that if it is modified, the update stamp of the owner of the attribute is modified -->
    <xs:attribute name="PLMImpacting">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--default value of the attribute -->
    <xs:attribute name="DefaultValue" type="xs:string" />
    <!--max length for a string attribute -->
    <xs:attribute name="MaxLength" type="xs:string" />
    <!--magnitude of a real attribute: list of possible values is defined in CATCkeMagnitudes file  -->
    <xs:attribute name="Magnitude" type="xs:string" />
    <!--defines both the visibility of the attribute (public/private) and who controls it  -->
    <!--Private means private: not seen from user and controlled by the modeler only. Can not be get or set by anybody else-->
    <!--Internal means private: not seen from user and controlled by the modeler. It cannot be read or set by anybody except the modeler. The modeler may provide some access -->
    <!--InternalRO means private to the server -->
    <!--External means public but under the control of the modeler and computed by the modeler. It is read only from a user perspective -->
    <!--ExternalRO means public but under the control of the server. It is read only from a user perspective -->
    <!--ExternalIN means public but under the control of the modeler. It is read write from a user perspective -->
    <!--Free means public and without any control from the modeler. It is read write from a user perspective -->
    <xs:attribute name="Protection" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Private"/>
          <xs:enumeration value="Internal"/>
          <xs:enumeration value="Free"/>
          <xs:enumeration value="ExternalRO" />
          <xs:enumeration value="ExternalIN" />
          <xs:enumeration value="External"/>
          <xs:enumeration value="InternalRO"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates that the attribute will be reset during cloning operation  -->
    <xs:attribute name="ResetOnCloning">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates that the attribute will be reset during revision operation  -->
    <xs:attribute name="ResetOnNewVersion">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Is the attribute defined once and cannot be modified afterwards?: for date and string attributes. Default is No -->
    <xs:attribute name="SetOnlyOnce">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="AtCreation"/>
          <xs:enumeration value="Later"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- For External/ExternalRO/ExternalIN/Free attributes, we can restrict the access in the UI. By defaut, it is deduced from protection -->
    <xs:attribute name="UIAccess">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None"/>
          <xs:enumeration value="ReadOnly"/>
          <xs:enumeration value="ReadWrite"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an attribute is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an attribute is multi line (must be presented as a multiple line editor). Default is no. Makes sense for strings-->
    <xs:attribute name="multiline">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if the format of an attribute's input format must be kept, in order to allow the display of the value in the same format as it was initialy entered. Default is No.-->
    <xs:attribute name="KeepFormat">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an attribute is shared (global). Temporary solution-->
    <xs:attribute name="Global">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- TO SUPPORT OLD TYPING WAITING FOR ENUM MIGRATION TO RANGES -->
    <!-- Default value name in case of an enumerated attribute -->
    <xs:attribute name="DefaultValueName" type="xs:string" />
    <!-- obsolete but still supported in previous metadata. Prefer Range. Reference to the enumere value-->
    <xs:attribute name="DefaultValueRef" type="xs:string" />
    <!--  obsolete but still supported in previous metadata. Prefer Range. Name of the enumere -->
    <xs:attribute name="TargetName" type="xs:string" />
    <!--  obsolete but still supported in previous metadata. Prefer Range. ref of the enumere -->
    <xs:attribute name="TargetRef" type="xs:string" />
    <!-- Obsolete: all multi valuated attributes are ordered as a List. Notion of Set is not used -->
    <xs:attribute name="CollectionType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Set" />
          <xs:enumeration value="List" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--obsolete -->
    <xs:attribute name="CustomerExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Simple" type="tns:Simple" />

  <!-- Description of volatile attribute: is a pure programming language notion. No persistency behind this -->
  <xs:complexType name="Volatile">
    <xs:sequence>
      <xs:element ref="tns:Comment" minOccurs="0"/>
      <xs:element ref="tns:Property" minOccurs="0"/>
    </xs:sequence>
    <!-- name of the attribute as it will be used in EKL  -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- obsolete: not used  -->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!-- C++ class that is able to compute the attribute value in read mode (and even write mode) on the rich client  -->
    <xs:attribute name="Accessor" type="xs:string" use="required" />
    <!-- Java class that is able to compute the attribute value in read mode (and even write mode) on the server -->
    <xs:attribute name="ServerAccessor" type="xs:string" />
    <!-- EKL data type: Boolean, Integer, Real, String, or Magnitude  -->
    <xs:attribute name="TypeName" type="xs:string" use="required" />
    <!-- Indicates if this attribute is only computed (read only) or can be used in both mode (read write)  -->
    <xs:attribute name="AccessMode" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="ReadOnly" />
          <xs:enumeration value="ReadWrite" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Volatile" type="tns:Volatile" />

  <!-- Obsolete: was used to generate a documentation in CAA. May be replaced by NLS declarations  -->
  <xs:complexType name="CAAComment">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:ShortRole" />
      <xs:element ref="tns:Role" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="CAAComment" type="tns:CAAComment" />

  <!-- Obsolete: was used to generate a documentation in CAA. May be replaced by NLS declarations  -->
  <xs:complexType name="ShortRole" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded" />
  </xs:complexType>
  <xs:element name="ShortRole" type="tns:ShortRole" />

  <!-- Obsolete: was used to generate a documentation in CAA. May be replaced by NLS declarations  -->
  <xs:complexType name="Role" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded" />
  </xs:complexType>
  <xs:element name="Role" type="tns:Role" />

  <xs:element name="Comment" type="xs:string" />

  <!-- Property that can be added on any object: is a couple name/value -->
  <xs:complexType name="Property">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <!-- Name of the property  -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Value of the property  -->
    <xs:attribute name="Value" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Property" type="tns:Property" />

  <!-- SubClause of a RelationClass: defines the possible types for the "to" and the "from" -->
  <xs:complexType name="SubClause">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <!-- Name must be equal to "to" or "from"-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Name of the types that can be used for such a sub clause, separated by ; -->
    <xs:attribute name="TargetName" type="xs:string" use="required" />
    <!-- Cardinality: expresses how many relations of the same type can be put on the to side or from side of an object. By default it is many-->
    <xs:attribute name="cardinality">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Many" />
          <xs:enumeration value="One" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- meaning is a free string that was used to describe the meaning of the to or the from. Is may be seen as a redundancy with SIXW-->
    <xs:attribute name="meaning" type="xs:string"/>
    <!-- expresses how the relationship will behave when the object referenced is revised. The relation may be duplicated, or it may float to the new revision, or it may stay as is. The default is stay as is (none)-->
    <xs:attribute name="minorrevision">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="none" />
          <xs:enumeration value="float" />
          <xs:enumeration value="replicate" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- expresses how the relationship will behave when the object referenced is cloned. The relation may be duplicated, or it may float to the duplicate object revision, or it may stay as is. The default is stay as is (none)-->
    <xs:attribute name="clone">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="none" />
          <xs:enumeration value="float" />
          <xs:enumeration value="replicate" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- expresses if the modification of the relation will propagate its modification stamp to the pointed. The default being no-->
    <xs:attribute name="propagatemodify">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="No" />
          <xs:enumeration value="Yes" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- expresses if the addition of such a relation (or the removal) will update the modification stamp of the pointed element. Default being No-->
    <xs:attribute name="propagateconnection">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="No" />
          <xs:enumeration value="Yes" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="SubClause" type="tns:SubClause" />

  <!-- Description of a relation class: it is a type that leads to the creation of objects, that models a relation between 2 objects -->
  <xs:complexType name="RelationClass">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment"/>
      <xs:element ref="tns:CAAComment"/>
      <xs:element ref="tns:Simple"/>
      <xs:element ref="tns:ReuseGlobalSimple"/>
      <xs:element ref="tns:Volatile"/>
      <xs:element ref="tns:Property"/>
      <xs:element ref="tns:Path" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tns:SubClause"/>
      <xs:element ref="tns:Method"/>
    </xs:choice>
    <!--Name of the relation class: must be unique-->
    <xs:attribute name="Name" type="xs:string" default="No" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!-- Abbreviation of a class used in OOTB naming computation -->
    <xs:attribute name="Abbreviation" type="xs:string"/>
    <!--Indicates if the relation class can be used to create objects (Abstract=No) -->
    <xs:attribute name="Abstract" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this relation class is public (known by customer through UI or customization tools) or is a pure private one-->
    <!--Modification 2015x: adding ProgrammerOnly to indicate a public type but not shown in UI-->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
          <xs:enumeration value="ProgrammerOnly" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Defines the relation class, this relation class inherits from-->
    <xs:attribute name="SuperName" type="xs:string" use="required"/>
    <!-- Indicates if a relation class supports delete-->
    <xs:attribute name="DeleteAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports lock/unlock-->
    <xs:attribute name="LockUnlockAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports transfer ownership-->
    <xs:attribute name="TransferOwnershipAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports edit properties-->
    <xs:attribute name="EditPropertiesAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports manage access (can drive the access rights of objects aggregated under it like design workspace)-->
    <xs:attribute name="ManageAccessAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports manage to be shared between projects-->
    <xs:attribute name="ShareBetweenProjectsAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class carries pointers-->
    <xs:attribute name="CarryPointers">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class carries streams: used when importing data (for instance from XPDM) to decide what to do with streams-->
    <xs:attribute name="CarryStreams">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <!-- Supports streams but there is no precision on the number of streams. Corresponds to 0 to many streams -->
          <xs:enumeration value="Yes"  />
          <!-- Does not support streams -->
          <xs:enumeration value="No" />
          <!-- Requires one stream and only one -->
          <xs:enumeration value="One" />
          <!-- Requires one stream at least -->
          <xs:enumeration value="One_At_Least" />
          <!-- Maximum is one -->
          <xs:enumeration value="One_Or_Zero" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class aggregates components-->
    <xs:attribute name="AggregatesComponents">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports update stamp-->
    <xs:attribute name="IsSynchronizable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class has a nature of Aggregation, Instanciation, Pointer or Association -->
    <xs:attribute name="RelationNature">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Aggregation" />
          <xs:enumeration value="Instanciation" />
          <xs:enumeration value="Pointer" />
          <xs:enumeration value="Association" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class is filtrable (through configuration effectivities)-->
    <xs:attribute name="Filtrable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Still used but not strategic: defines the exposition of the class to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an extension is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if the relation class can be specialized by customer: used by KWD (data model specialization tool)-->
    <xs:attribute name="Specializable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this relation class can be extended by customer extensions: used by KWD (data model specialization tool)-->
    <xs:attribute name="CustomerExtensible">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Defines the level of relation class (modeler versus application (Discipline=Yes)): application cannot override life cycle operations behavioral patterns -->
    <xs:attribute name="Discipline" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- RDFClass: how the Relation class will be mapped to a RDF Class in the navigation model / Indexer  -->
    <xs:attribute name="RDFClass" type="xs:string"/>
    <!-- SIXW predicate: how the Relation class, used as a pointer, will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW" type="xs:string"/>
    <!-- SIXW predicate: how the to pointer of the relation class will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW_to" type="xs:string"/>
    <!-- SIXW predicate: how the from pointer of the relation class will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW_from" type="xs:string"/>
  </xs:complexType>
  <xs:element name="RelationClass" type="tns:RelationClass" />

  <!-- Description of a path type: this concept can be reused by some relationships   -->
  <xs:complexType name="PathType">
    <xs:choice maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element ref="tns:Property" />
      <xs:element ref="tns:Simple"/>
      <xs:element ref="tns:ReuseGlobalSimple"/>
    </xs:choice>
    <!-- Name of the path: equivalent of a name of an attribute   -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Defines the super pathtype this pathtype inherits from: to reuse attributes declaration-->
    <xs:attribute name="SuperName" type="xs:string" use="required" />
    <!--Indicates if the class can be used to create objects: abstract=No-->
    <xs:attribute name="Abstract" default="No"/>
    <!-- Probably obsolete   -->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!-- Indicates if this attribute contains one or several paths  -->
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Adaptative to minor: yes means that the SR will reconnect to the current/best minor in session   -->
    <!-- Adaptative to minor: no means that the SR will stubbornly reference the minor on which it has been created  -->
    <!-- Should be necessary when RoleName is not valuated -->
    <xs:attribute name="AdaptativeToMinor">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Describes the behavior expected when the target object changes its effectivity: Yes means that the SR is supposed to be duplicated when the instance is split   -->
    <xs:attribute name="RerouteOnEffectivityChange">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Describes the sensitivity to update stamp of the pointed object   -->
    <xs:attribute name="SynchroSensitivity">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Last" />
          <xs:enumeration value="PathAndLast" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Orientation: Neutral means that the "link" is not oriented   -->
    <!-- Orientation: In means that the pointed is in input (impacts) of the owner of the path   -->
    <!-- Orientation: Out means that the pointed is impacted by the owner of the path   -->
    <!-- Orientation: InOut means that the impacts are in both sides    -->
    <!-- If not precised, considered as Neutral    -->
    <!-- Should be necessary when RoleName is not valuated -->
    <xs:attribute name="Orientation" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Neutral" />
          <xs:enumeration value="In" />
          <xs:enumeration value="Out" />
          <xs:enumeration value="InOut" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--defines both the visibility of the attribute (public/private) and who controls it  -->
    <!--Internal means private: not seen from user and controlled by the modeler -->
    <!--External means public but under the control of the modeler and computed by the modeler. It is read only from a user perspective -->
    <!--Free means public and without any control from the modeler. It is read write from a user perspective -->
    <xs:attribute name="Protection">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Internal"/>
          <xs:enumeration value="Free"/>
          <xs:enumeration value="External"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- a list of Types to which the PathType can refer -->
    <xs:attribute name="TargetNames" type="xs:string" />
    <!-- The types that can aggregate such a path type   -->
    <xs:attribute name="OwnerTypes" type="xs:string" />
    <!-- SIXW predicate: how the SR, will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW" type="xs:string"/>
  </xs:complexType>
  <xs:element name="PathType" type="tns:PathType" />


  <!-- Description of a Range: a range is a constraing for the values of an attribute  -->
  <xs:complexType name="Range">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Property" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:Equal" />
      <xs:element ref="tns:NotEqual" />
      <xs:element ref="tns:LessThan" />
      <xs:element ref="tns:LessThanEqual" />
      <xs:element ref="tns:GreaterThan" />
      <xs:element ref="tns:GreaterThanEqual" />
      <xs:element ref="tns:Between" />
      <xs:element ref="tns:Program" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="Range" type="tns:Range" />
  <!-- Constraint of equality: contains the value   -->
  <xs:element name="Equal" type="xs:string" />
  <!-- Constraint of inequality: contains the value   -->
  <xs:element name="NotEqual" type="xs:string" />
  <!-- Constraint of less than a value: contains the value   -->
  <xs:element name="LessThan" type="xs:string" />
  <!-- Constraint of less than or equal to a value: contains the value   -->
  <xs:element name="LessThanEqual" type="xs:string" />
  <!-- Constraint of greater than a value: contains the value   -->
  <xs:element name="GreaterThan" type="xs:string" />
  <!-- Constraint of greater than or equal a value: contains the value   -->
  <xs:element name="GreaterThanEqual" type="xs:string" />
  <!-- Constraint of between two values   -->
  <xs:complexType name="Between">
    <!-- a parfaire: comment exprimer qu il faut obligatoirement une borne inferieure et une borne superieure ? -->
    <xs:choice minOccurs="1" maxOccurs="2">
      <xs:element name="Min" type="xs:string" />
      <xs:element name="MinEqual" type="xs:string" />
      <xs:element name="Max" type="xs:string" />
      <xs:element name="MaxEqual" type="xs:string" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="Between" type="tns:Between" />
  <!-- Constraint modeled by a program that is executed   -->
  <xs:complexType name="Program">
    <!-- name of the program that is executed   -->
    <xs:attribute name="Name" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Program" type="tns:Program" />

  <!-- FOR BEHAVIORAL DICTIONARY -->
  <xs:complexType name="Method">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:ProcedureForUsage" />
      <xs:element name="RealizeMethodType" type="tns:MethodTypeHref" minOccurs="1" maxOccurs="1"/>
    </xs:choice>
    <xs:attribute name="ImplementationType" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Self" />
          <xs:enumeration value="AsFather" />
          <xs:enumeration value="None" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Method" type="tns:Method" />

  <xs:complexType name="MethodTypeHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="ProcedureForUsage">
    <xs:choice minOccurs="1" maxOccurs="2">
      <xs:element name="Usage" type="tns:UsageHref" minOccurs="1" maxOccurs="1"/>
      <xs:element name="UsedProcedure" type="tns:ProcedureHref" minOccurs="1" maxOccurs="1"/>
    </xs:choice>
    <xs:attribute name="FileLocation" type="xs:string"/>
    <xs:attribute name="Language" type="xs:string"/>
  </xs:complexType>
  <xs:element name="ProcedureForUsage" type="tns:ProcedureForUsage" />

  <xs:complexType name="UsageHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="ProcedureHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="Function">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element ref="tns:Implementation" minOccurs="1"/>
      <xs:element name="Signature" type="tns:SignatureHref" minOccurs="1" maxOccurs="1"/>
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Function" type="tns:Function" />

  <xs:complexType name="SignatureHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="Implementation">
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="FileLocation" type="xs:string" use="required" />
    <xs:attribute name="Language" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="EKL" />
          <xs:enumeration value="PLMQL" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Implementation" type="tns:Implementation" />

  <xs:complexType name="Signature">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element name="Parameter" type="tns:FuncParameter" />
    </xs:choice>
    <xs:attribute name="id" type="xs:string" />
  </xs:complexType>
  <xs:element name="Signature" type="tns:Signature" />

  <xs:complexType name="FuncParameter">
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Lower" type="xs:integer" />
    <xs:attribute name="Upper" type="xs:integer" />
    <xs:attribute name="Direction" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="in" />
          <xs:enumeration value="out" />
          <xs:enumeration value="inout" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="MultiValuated" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="DataType" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Date" />
          <xs:enumeration value="PLMId" />
          <xs:enumeration value="PLMRouteSet" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <!--Description of a unique key: a unique key determines a unicity rule for a collection of attributes of an object. Attributes are taken on a type and a deployment extension -->
  <xs:complexType name="UniqueKey">
    <xs:choice minOccurs="0" maxOccurs="0">
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Property" />
    </xs:choice>
    <!-- Name of the unique key -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!-- The name of the Class that contains some attribute of the unique key -->
    <xs:attribute name="ClassName" type="xs:string" use="required" />
    <!-- Potentially, name of the deployment extension that contains some attributes of the unique key -->
    <xs:attribute name="ExtensionName" type="xs:string" />
    <!--List of attributes -->
    <xs:attribute name="AttributeNames" type="xs:string" />
    <!--Indicates if this key includes the composer ID. By default it is not the case-->
    <xs:attribute name="IncludesComposer">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="UniqueKey" type="tns:UniqueKey" />


  <!-- Description of a path: some kind of attribute that references a path of objects   -->
  <xs:complexType name="Path">
    <xs:choice maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element ref="tns:Property" />
      <xs:element ref="tns:Simple"/>
      <xs:element ref="tns:ReuseGlobalSimple"/>
    </xs:choice>
    <!-- Name of the path: equivalent of a name of an attribute   -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Defines the type of the path (the path type). Optional. If not precised it will be PathType-->
    <xs:attribute name="Type" type="xs:string" default="PathType"/>
    <!-- Define a constraint on the list of types that can be referenced by the path -->
    <xs:attribute name="TargetNames" type="xs:string" />
    <!-- Probably obsolete   -->
    <xs:attribute name="Uuid" type="xs:string" use="required"  />
    <!-- Probably obsolete : still used in rich client for bad reasons [chd:06.03.2015] je blinde les seules valeurs possibles  -->
    <xs:attribute name="TargetName">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="V_SR" />
          <xs:enumeration value="V_SRs" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Probably obsolete   -->
    <xs:attribute name="TargetRef" type="xs:string"  />
    <!-- Probably obsolete   -->
    <xs:attribute name="Lower" type="xs:string" />
    <!-- Indicates if this attribute contains one or several paths  -->
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Probably obsolete   -->
    <xs:attribute name="Upper" type="xs:string" />
    <!-- Should be suppressed with Path project   -->
    <xs:attribute name="Semantics">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Unknown" />
          <xs:enumeration value="IsInstanceOf" />
          <xs:enumeration value="Composition" />
          <xs:enumeration value="Reference" />
          <xs:enumeration value="Reference2" />
          <xs:enumeration value="Reference3" />
          <xs:enumeration value="Reference4" />
          <xs:enumeration value="Reference5" />
          <xs:enumeration value="Reference6" />
          <xs:enumeration value="Reference7" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Should be kept for the SRs that are reusing a PathType    -->
    <xs:attribute name="RoleName" type="xs:string" />
    <!-- Pour gerer l'historique -->
    <xs:attribute name="RoleRef" type="xs:string" />
    <!-- Adaptative to minor: yes means that the SR will reconnect to the current/best minor in session   -->
    <!-- Adaptative to minor: no means that the SR will stubbornly reference the minor on which it has been created  -->
    <!-- Should be necessary when RoleName is not valuated -->
    <xs:attribute name="AdaptativeToMinor" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Describes the behavior expected when the target object changes its effectivity: Yes means that the SR is supposed to be duplicated when the instance is split   -->
    <xs:attribute name="RerouteOnEffectivityChange" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Describes the sensitivity to update stamp of the pointed object   -->
    <xs:attribute name="SynchroSensitivity" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Last" />
          <xs:enumeration value="PathAndLast" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Orientation: Neutral means that the "link" is not oriented   -->
    <!-- Orientation: In means that the pointed is in input (impacts) of the owner of the path   -->
    <!-- Orientation: Out means that the pointed is impacted by the owner of the path   -->
    <!-- Orientation: InOut means that the impacts are in both sides    -->
    <!-- If not precised, considered as Neutral    -->
    <!-- Should be necessary when RoleName is not valuated -->
    <xs:attribute name="Orientation" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Neutral" />
          <xs:enumeration value="In" />
          <xs:enumeration value="Out" />
          <xs:enumeration value="InOut" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--defines both the visibility of the attribute (public/private) and who controls it  -->
    <!--Internal means private: not seen from user and controlled by the modeler -->
    <!--External means public but under the control of the modeler and computed by the modeler. It is read only from a user perspective -->
    <!--Free means public and without any control from the modeler. It is read write from a user perspective -->
    <xs:attribute name="Protection" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Internal"/>
          <xs:enumeration value="Free"/>
          <xs:enumeration value="External"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- SIXW predicate: how the SR, will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW" type="xs:string"/>
  </xs:complexType>
  <xs:element name="Path" type="tns:Path" />

  <!-- Obsolete kept for MQL generator  -->
  <xs:complexType name="ContextKey">
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="SimpleName" type="xs:string" use="optional" />
    <xs:attribute name="SimpleRef" type="xs:string" use="optional" />
  </xs:complexType>
  <xs:element name="ContextKey" type="tns:ContextKey" />

  <!-- Obsolete kept for MQL generator  -->
  <xs:complexType name="InterfaceImplementation">
    <xs:sequence>
      <xs:element ref="tns:Comment" minOccurs="0"/>
      <xs:element ref="tns:CAAComment" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="TargetRef" type="xs:string" />
    <xs:attribute name="TargetName" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="InterfaceImplementation" type="tns:InterfaceImplementation" />

  <!-- Description of a FlatTable type: as a first approximation, more or less equivalent to a RDBMS table -->
  <xs:complexType name="FlatTable">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="tns:Property"/>
        <xs:element ref="tns:Column"/>
        <xs:element ref="tns:Index"/>
      </xs:choice>
      <xs:element ref="tns:SubTable" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <!--Name of the FlatTable: must be unique-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Indicates if the FlatTable only support row inserts, or also row updates/deletes -->
    <xs:attribute name="AddOnly" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="FlatTable" type="tns:FlatTable" />

  <!-- FlatTable subtable -->
  <xs:complexType name="SubTable">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Column"/>
      <xs:element ref="tns:Index"/>
    </xs:choice>
  </xs:complexType>
  <xs:element name="SubTable" type="tns:SubTable" />

  <!-- Description of a Column type: as a first approximation, more or less equivalent to a RDBMS table column -->
  <xs:complexType name="Column">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Property"/>
    </xs:choice>
    <!--Name of the FlatTable: must be unique-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Type of the column -->
    <xs:attribute name="Type" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Date" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Identifier" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Clob" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--max length for a string attribute -->
    <xs:attribute name="MaxLength" type="xs:string" />
    <!--default value of the attribute -->
    <xs:attribute name="DefaultValue" type="xs:string" />
    <!--by default, column to select to build the value -->
    <xs:attribute name="DefaultSelectColumn" type="xs:string" />
    <!--selectable to query when DefaultSelectColumn is used -->
    <xs:attribute name="DefaultSelectable" type="xs:string" />
    <!--Indicates if empty values are allowed or not -->
    <xs:attribute name="NullAllowed" default="Yes">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Column" type="tns:Column" />

  <!-- Description of an FlatTable Index type: as a first approximation, more or less equivalent to a RDBMS table index -->
  <xs:complexType name="Index">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <!--Name of the FlatTable Index: must be unique in the FlatTable scope-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify an index uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Indicates index's uniqueness -->
    <xs:attribute name="Unique" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Column list -->
    <xs:attribute name="ColumnNames" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:element name="Index" type="tns:Index" />

</xs:schema>
